home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
batchut
/
env.zip
/
ENV.CMP
next >
Wrap
Text File
|
1988-01-27
|
4KB
|
264 lines
n ENV.CMP for assembly by DEBUG < ENV.CMP
n Purpose: pad/unpad the environment with ENVnn=
n env.com
f 100 500 c3
rcx
300
a 100
;100
jmp 2c0
;103 env address
db 00 00 'ee'
;107 envsize
db 'ss'
;109 envtop
db 'tt'
;10b envptr
db 'pp'
;10d mod address
db 80 00 'mm'
;111 pad/unpad
db 00
;112 testline
db 'unpad' 00
;118 found
db 00
a 120
push ds
;121 find top COMMAND.COM
mov ax,[16]
mov ds,ax
cmp word ax,[16]
jne 121
;12c find its main environment
dec ax
mov ds,ax
add word ax,[3]
inc ax
mov ds,ax
mov word bx,[3]
mov cl,4
shl bx,cl
inc ax
pop ds
mov [109],bx
mov [107],bx ;the length in bytes
mov [105],ax ;segenv
;now have env seg/ofs at [105]:[103]
les di,[103]
mov cx,[107]
mov ax,0
;156 more repeats
repne scasb
dec cx
scasb
jne 156
mov [10b],cx
dec di
mov [109],di
ret
a 170
;170 string master for entry
db 'ENV01=abcdefg' 0 0
a 180
;180 verify structure
mov cx,0
add cl,[80]
je 1db ;quit if no tail
les di,[10d]
add di,cx
mov ax,20
std
repe scasb
je 1db ;quit if all space
inc cx
mov di,81
cld
repe scasb
inc cx
mov [80],cl ;length of trimmed string
dec di
mov [10d],di ;posn of first char
mov al,[di]
or al,20
mov [111],al ;record of first letter
lds si,[10d]
mov bp,113
cmp cl,3
je 1c3
mov bp,111
cmp cl,5
jne 1db
;1c3 loop
lodsb
inc di
inc bp
or al,20
cmp al,[bp]
loope 1c3
jne 1db
mov ax,170
mov [10d],ax
mov al,[111]
clc
jmp 1dc
;1db not ok
stc
;1dc exit
ret
a 1df
;1df pad sequentially with ENV01, ENV02, until full
call 200
jc 1dc
call 26e
inc byte [174]
cmp byte [174],3a
jne 1df
inc byte [173]
mov al,30
mov [174],al
jmp 1df
a 200
;200 find size of present entry
cld
les di,[10d] ;find length of LHS
mov cx,di
mov al,3d
repne scasb
sub di,cx
ror di,1
dec di
mov bx,di
;212 search the environment for match
mov cx,[109]
lds si,[10d]
les di,[103]
inc si
;21f loop for main search
dec si
lodsb
repne scasb
push cx
push si
push di
mov cx,bx
repe cmpsb
pop di
pop si
pop cx
jcxz 25f
jne 21f
;231 search for end
mov si,di
mov bx,cx
mov ax,0
repne scasb
sub bx,cx
xchg si,di
cs: mov ax,[109]
sub ax,bx
cs: add ax,F
dec ax
cs: cmp [107],ax
jc 26a
push es
pop ds
dec di
inc cx
rep movsb
dec di
cs: mov [109],di
clc
jmp 26a
;25f
push cs
pop ds
mov ax,di
add ax,F
cmp [107],ax
;26a
ret
a 26e
;26e add new entry
cs: mov cl,F
cs: lds si,[10d]
mov bx,cx
rep movsb
dec di
mov [109],di
ret
a 280
;280 unpad
mov ax,[107]
mov bx,e
div bl
inc ax
mov [117],al
;28c unpad loop
call 200
push cs
push cs
pop ds
pop es
jnc 297
jmp 2b1
;297
inc byte [174]
cmp byte [174],3a
jne 2ab
inc byte [173]
mov al,30
mov [174],al
;2ab
dec byte [117]
jne 28c
;2b1
ret
a 2c0
;2c0 MAIN PROGRAMME
mov [10f],cs ;mod address for LDS/LES calls
call 120 ;find envbase and envsize
call 180 ;check validity of mod format
jnc 2ce ;if not valid ...
jmp 2e0 ;... exit via syntax (err #1)
;2ce
cmp al,70 ;if not pad ...
jne 2d7 ;... goto unpad
call 1df ;pad ...
jmp 2da ;... and exit
;2d7 ;unpad
call 280
;2da ;exit OK (err #0)
mov al,0
;2dc
mov ah,4c ;standard exit from programme
int21
; END OF MAIN PROGRAMME
a 2e0
mov ah,9 ;print syntax and exit
mov dx,300
int 21
mov al,1
jmp 2dc
a 300
;300
db 0a 0d 'Syntax: env pad|unpad' 0d 0a 24
db '(C) 1988 Hylton Boothroyd, University of Warwick$' 0a 0d
db 'Purpose: pad the environment with ENVnn variables,'0a 0d
db 'or delete all ENVnn variables assumed to start with ENV01$'
w
q